<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 函数能不能在块级作用域之中声明？这是一个相当令人混淆的问题。

        // ES5 规定，函数只能在顶层作用域和函数作用域之中声明，不能在块级作用域声明。
        // 情况一
        if (true) {
            function f() { }
        }

        // 情况二
        try {
            function f() { }
        } catch (e) {
            // ...
        }

        //上面两种函数声明，根据 ES5 的规定都是非法的。

        // 但是，浏览器没有遵守这个规定，为了兼容以前的旧代码，还是支持在块级作用域之中声明函数，因此上面两种情况实际都能运行，不会报错。
    </script>
</body>

</html>